package com.niuwa.p2p.dao.protocol;

import java.util.List;
import java.util.Map;

import com.niuwa.p2p.dao.MyBatisDao;
import com.niuwa.p2p.entity.productTemplate.ProductProtocol;
import com.niuwa.p2p.entity.productTemplate.ProtocolFile;
import com.niuwa.p2p.vo.protocol.ProductProtocolVo;

@MyBatisDao 
public interface ProtocolDao{
	
	/**
	 * 查询符合条件的协议
	 * @param paramMap 查询参数
	 * @return 协议列表
	 */
	public List<ProductProtocolVo> selectProtocolBySelective(Map<String, Object> paramMap);

	/**
	 * 查询符合条件的协议数
	 * @param paramMap
	 * @return
	 */
	public int selectProtocolCountBySelective(Map<String, Object> paramMap);

	/**
	 * 删除协议
	 * @param paramMap
	 * @return
	 */
	public int deleteProtocolBySelective(Map<String, Object> paramMap) throws Exception;

	/**
	 * 修改协议状态
	 * @param paramMap
	 * @return
	 */
	public int updateProtoStatusBySelective(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * 根据协议ID获取协议信息
	 * @param protId
	 * @return
	 */
	public ProductProtocolVo getProtocolByProtId(long protId);

	/**
	 * 获取所有协议
	 * @return
	 * @throws Exception
	 */
	public List<ProductProtocolVo> getAllProtocol() throws Exception;

	/**
	 * 根据协议名称获取符合的协议信息
	 * @param protName
	 * @return
	 * @throws Exception
	 */
	public List<ProductProtocolVo> getProtocolVersionByName(String protName) throws Exception;
	
	/**
	 * 根据协议名称和版本号获取对应协议信息
	 * @param protName 协议名称
	 * @param mainVersion 主版本号
	 * @param minorVersion 小版本号
	 * @return
	 * @throws Exception
	 */
	public ProductProtocolVo  getProtocolByNameAndVersion(ProductProtocolVo protocolVo) throws Exception;
	
	/**
	 * 添加 产品协议信息
	 * 
	 * @param  productProtocol  产品协议信息
	 * @throws Exception
	 */
	public int insertProductProtocol(ProductProtocol productProtocol)  throws Exception;
	
	/**
	 * 添加协议关联文件
	 * 
	 * @param  protocolFile  协议关联文件
	 * @throws Exception
	 */
	public int insertProtocolFile(ProtocolFile protocolFile)  throws Exception;
	
	/**
	 * 取得所有产品协议名称
	 * 
	 * @return 所有产品协议名称
	 */
	public List<String> selectAllProtName();
	
	/**
	 * 根据协议名称 获取最大版本协议
	 * @param protName 协议名称
	 * @return
	 */
	public ProductProtocol selectProductProtocolLastVersionByProtName(String protName);
	
	/**
	 * 根据产品模板ID获取产品协议列表
	 * 
	 * @param tempId
	 * @return List<ProductProtocol> 产品协议列表
	 */
	public List<ProductProtocol> getPpListByTempId(long tempId);
	
	/**
	 * 获取产品绑定的协议
	 * @param prodCode 产品编号
	 * @return
	 */
	public List<ProductProtocol> getProdRelativeProt(String prodCode);
	
	
	/**
	 * 获取符合类型的所有协议信息
	 * @return
	 * @throws Exception
	 */
	public List<ProductProtocolVo> getProtocolByType(String protType) throws Exception;
	
	
}
